package com.gl.glbooks.managers
{
	import com.gl.glbooks.Utils.DateUtils;
	import com.gl.glbooks.events.GLBooksEvent;
	import com.gl.glbooks.model.constants.Constants;
	import com.gl.glbooks.vos.*;
	
	import flash.events.EventDispatcher;
	import flash.events.IEventDispatcher;
	import flash.net.URLRequest;
	import flash.net.navigateToURL;
	import flash.utils.ByteArray;
	import flash.utils.Dictionary;
	
	import mx.collections.ArrayCollection;
	import mx.collections.Sort;
	import mx.collections.SortField;
	import mx.controls.Alert;
	import mx.core.FlexGlobals;
	import mx.formatters.DateFormatter;
	import mx.managers.CursorManager;
	import mx.messaging.messages.AsyncMessage;

	public class GLBooksManager extends EventDispatcher
	{
		private var dispatcher:IEventDispatcher;
		
		//Datos de grafico de Actividades
		private var diaDesdeFiltrado:Date = null;
		private var diaHastaFiltrado:Date = null;
		private var periodoFiltrado:String = null;
		private var camposBorradosFiltrado:Array = null;
		
		/* LISTADO DE LIBROS */
		[Bindable]
		public var libros:ArrayCollection;
		
		/* LISTADO DE LIBROS */
		[Bindable]
		public var sugerencias:ArrayCollection;
		
		/* DIGITAL SUBIDO POR USUARIO */
		[Bindable]
		public var sugerenciasDigitalSubido:ArrayCollection;
		
		/* LISTADO DE EJEMPLARES */
		[Bindable]
		public var ejemplares:ArrayCollection;
		
		/* LISTADO DE CATEGORIAS */
		[Bindable]
		public var categorias:ArrayCollection;
		
		/* LISTADO DE EDITORIALES */
		[Bindable]
		public var editoriales:ArrayCollection;
		
		/* LISTADO DE OFICINAS */
		[Bindable]
		public var oficinas:ArrayCollection;
		
		/* LISTADO DE PALABRAS CLAVES */
		[Bindable]
		public var palabrasClaves:ArrayCollection;
		
		/* LISTADO DE USUARIOS CLAVES */
		[Bindable]
		public var usuarios:ArrayCollection;
		
		/* LISTADO DE COMENTARIOS */
		[Bindable]
		public var comentarios:ArrayCollection;
		/* ESTADO DE LAS PANTALLAS */
		[Bindable]
		public var loginState:String;
			
		[Bindable]
		public var contraseniaLogin:String;
		
		/* ESTADO DE LAS PANTALLAS */
		[Bindable]
		public var applicationState:String;
		
		/* ESTADO DE LA PANTALLA DE SUGERENCIAS */
		[Bindable]
		public var sugerenciasState:String;
		
		[Bindable]
		public var sugerenciasDigialSubidoState:String;

		/* ESTADO DE LA PANTALLA DE PRESTAMOS */
		[Bindable]
		public var prestamosState:String;

		[Embed(source="assets/flags/es_ES.png")]
		[Bindable]
		public var es_AR:Class;
		
		[Embed(source="assets/flags/en_US.png")]
		[Bindable]
		public var en_US:Class;

		[Bindable]
		public var locales:ArrayCollection = new ArrayCollection( [ {label:'Español', id:'es_ES', icon:es_AR} , {label:'English', id:'en_US', icon:en_US} ] );
		
		[Bindable]
		public var actividades:ArrayCollection = new ArrayCollection();


		
		//accion a realizar con el libro
		[Bindable]
		public var libroSeleccionadoAccion:String;

		/* LIBRO SELECCIONADO */
		private var _libroSeleccionado:Libro;
		
		[Bindable]
		public function get libroSeleccionado():Libro
		{
			return _libroSeleccionado;
		}
		
		
		/* PRESTAMO SELECCIONADO */
		[Bindable]
		public var prestamoSeleccionado:Prestamo;
		
		/* PRESTAMOS */
		[Bindable]
		public var prestamos:ArrayCollection;

		/* EJEMPLAR SELECCIONADO */
		[Bindable]
		public var ejemplarSeleccionado:Ejemplar;
		
		/* USUARIO SELECCIONADO */
		[Bindable]
		public var usuarioSeleccionado:Usuario;
		
		/* IDIOMA SELECCIONADO */
		[Bindable]
		public var idiomaSeleccionado:int;
		
		/* CONFIRMACION RECIBIDA */
		[Bindable]
		public var confirmacionRecibida:Confirmacion;
		
		/* CATEGORIA */
		[Bindable]
		public var categoria:Categoria;
		
		/* EDITORIAL */
		[Bindable]
		public var editorial:Editorial;
		
		/* SUGERENCIA*/
		[Bindable]
		public var sugerencia:Sugerencia;

		/* SUGERENCIA*/
		[Bindable]
		public var sugerenciaSeleccionada:Sugerencia;

		/* SUGERENCIA PDF SUBIDO*/
		[Bindable]
		public var sugerenciaDigitalSubido:SugerenciaPDFsubido;
		
		/* SUGERENCIA PDF SUBIDO*/
		[Bindable]
		public var sugerenciaSeleccionadaDigitalSubido:SugerenciaPDFsubido;
				
		/* COMENTARIO */
		[Bindable]
		public var comentario:Comentario;
		
		[Bindable]
		public var cubeStackSelected:Number = 0;
		
		private var filtradoActividades:Boolean = false;
		
		[Bindable]
		public var responsableState:String;
		
		
		
		public function GLBooksManager( dispatcher:IEventDispatcher )
		{
			super();
			this.dispatcher = dispatcher
		}
		
		[Bindable]
		public function set libroSeleccionado( value:Libro ):void
		{
			if( value != _libroSeleccionado )
			{
				_libroSeleccionado = value;
				if( _libroSeleccionado.imagen && _libroSeleccionado.imagenData == null )
				{
					var event: GLBooksEvent = new GLBooksEvent( GLBooksEvent.ACTUALIZAR_IMAGEN );
					event.libroSeleccionado = _libroSeleccionado;
					dispatcher.dispatchEvent( event ); 
				}
			}
		}
		
		public function setLibros( value:ArrayCollection ):void
		{
			var librosFilterFunction:Function;
			
			/*
			* Guardo la filterFunction en caso de que exista, para aplicarla luego de actualizar los libros.
			* Esto es necesario debido a cuando agrega un nuevo libro, se pierden los filtros que se estaban aplicando.
			*/
			if( libros )
			{
				if( libros.filterFunction != null )
					librosFilterFunction = libros.filterFunction;
			}
				
			libros = value;
			if( librosFilterFunction != null )
			{
				libros.filterFunction = librosFilterFunction;
				libros.refresh();
			}
			

			if(  FlexGlobals.topLevelApplication.parameters.estado )
			{
				switch( FlexGlobals.topLevelApplication.parameters.estado )
				{
					case "detalleLibro":
						if( FlexGlobals.topLevelApplication.parameters.libroId )
						{
							for each( var currentBook:Libro in value )
							{
								if( currentBook.id.toString() == FlexGlobals.topLevelApplication.parameters.libroId )
								{
									libroSeleccionado = currentBook;
								}
							}
						}
						break;
				}
			}
		}
		
		public function setPrestamos( value:ArrayCollection ):void
		{
			prestamos = value;
		}
		
		public function setSugerencias( value:ArrayCollection ):void
		{
			sugerencias = value;
			

			if(  FlexGlobals.topLevelApplication.parameters.estado )
			{
				switch( FlexGlobals.topLevelApplication.parameters.estado )
				{
					case "gestionarsugerencia":
						
						if( FlexGlobals.topLevelApplication.parameters.sugerenciaId )
						{
							
							for each( var currentSugerencia:Sugerencia in value )
							{
								if( currentSugerencia.id.toString() == FlexGlobals.topLevelApplication.parameters.sugerenciaId )
								{
									sugerenciaSeleccionada = currentSugerencia;
								}
							}
						}
						break;
				}
			}
		}
		
		public function setSugerenciasDigitalSubido( value:ArrayCollection ):void
		{
			sugerenciasDigitalSubido = value;
		}
		
		public function setEjemplares( value:ArrayCollection ):void
		{
			ejemplares = value;	
		}

		
		public function setCategorias( value:ArrayCollection ):void
		{
			categorias = value;	
		}
		
		public function setEditoriales( value:ArrayCollection ):void
		{
			editoriales = value;	
		}
		
		public function setOficinas( value:ArrayCollection ):void
		{
			oficinas = value;
		}
		
		public function setPalabrasClaves( value:ArrayCollection ):void
		{
			palabrasClaves = value;	
		}
		
		public function setUsuarios( value:ArrayCollection ):void
		{
			usuarios = value;	
		}
		
		public function setLocales(value:ArrayCollection):void
		{
			locales = value;
		}
		
		public function setComentariosLibro( value:ArrayCollection ):void
		{
			comentarios = value;	
		}
		
		public function setApplicationState( state:String ):void
		{
			applicationState = state;	
		}
		
		public function setSugerenciasState( state:String ):void
		{
			sugerenciasState = state;	
		}

		public function setPrestamosState( state:String ):void
		{
			prestamosState = state;
		}
		
		
		public function setLoginState( state:String ):void
		{
			loginState = state;	
		}
		
		public function setLibroSeleccionado( libro:Libro ):void
		{
			libroSeleccionado = libro;
		}
				
		// Plantea si lo usa altapdfsugerido, modificarlibro, altalibro
		public function setLibroSeleccionadoAccion( libro:Libro, accion:String ):void
		{
			libroSeleccionado = libro;
			libroSeleccionadoAccion = accion;
		}		

		public function setSugerenciaSeleccionada( sugerencia:Sugerencia ):void
		{
			sugerenciaSeleccionada = sugerencia;
		}

		public function setSugerenciaSeleccionadaDigitalSubido( sugerencia:SugerenciaPDFsubido ):void
		{
			sugerenciaSeleccionadaDigitalSubido = sugerencia;
		}
		
		public function setUsuarioSeleccionado( usuario:Usuario ):void
		{
			usuarioSeleccionado = usuario;
		}
		
		public function setPrestamoSeleccionado( prestamo:Prestamo ):void
		{
			prestamoSeleccionado = prestamo;
		}
		
		public function setEjemplarSeleccionado( ejemplar:Ejemplar ):void
		{
			ejemplarSeleccionado = ejemplar;
		}
		
		public function setConfirmacion( confirmacion:Confirmacion):void
		{
			confirmacionRecibida = confirmacion;
			
			if( confirmacion.estado  == Constants.CONFIRMACION_OK )
			{ 
				setApplicationState( Constants.STATE_INICIAL );
			//	dispatcher.dispatchEvent( new GLBooksEvent( GLBooksEvent.BUSCAR_LIBROS ) );
				
				//trackeo de las diferentes actividades
				if( confirmacion.tipo == Constants.CONFIRMACION_ALTA_SUGERENCIA )
					agregarActividad( Constants.ACTIVIDAD_ALTA_SUGERENCIA, 0 );
				else if( confirmacion.tipo == Constants.CONFIRMACION_ALTA_COMENTARIO )
					agregarActividad( Constants.ACTIVIDAD_ALTA_COMENTARIO, 0 );
				
				
			} else {
				if( confirmacion.errorString )
				{
					//TODO:hay que recibir el key del property para poder internacionalizar.
					Alert.show( confirmacion.errorString );
				} else {
					//Todo: Gabriel flores: 2011 05 11, revisar cuando llegan estos casos
					Alert.show( "Error" );
				}
			}
				
		}
		
		
			
		public function setConfirmacionSugerenciaPdf( confirmacion:Confirmacion):void
		{
			confirmacionRecibida = confirmacion;
			
			if( confirmacion.estado  == Constants.CONFIRMACION_OK )
			{ 
				setSugerenciasState(Constants.STATE_SUGERENCIAS_INICIAL);
				//trackeo de las diferentes actividades
				if( confirmacion.tipo == Constants.CONFIRMACION_ALTA_SUGERENCIA )
					agregarActividad( Constants.ACTIVIDAD_ALTA_SUGERENCIA, 0 );
				else if( confirmacion.tipo == Constants.CONFIRMACION_ALTA_COMENTARIO )
					agregarActividad( Constants.ACTIVIDAD_ALTA_COMENTARIO, 0 );
				
				
			} else {
				if( confirmacion.errorString )
				{
					//TODO:hay que recibir el key del property para poder internacionalizar.
					Alert.show( confirmacion.errorString );
				} else {
					//Todo: Gabriel flores: 2011 05 11, revisar cuando llegan estos casos
					Alert.show( "Error" );
				}
			}
			
		}

		public function setConfirmacionAltaComentario( confirmacion:Confirmacion):void
		{
			confirmacionRecibida = confirmacion;
			if( confirmacion.estado  == Constants.CONFIRMACION_OK )
			{ 
				//trackeo de las diferentes actividades
				if( confirmacion.tipo == Constants.CONFIRMACION_ALTA_SUGERENCIA )
					agregarActividad( Constants.ACTIVIDAD_ALTA_SUGERENCIA, 0 );
				else if( confirmacion.tipo == Constants.CONFIRMACION_ALTA_COMENTARIO )
					agregarActividad( Constants.ACTIVIDAD_ALTA_COMENTARIO, 0 );
			} else {
				//TODO:hay que recibir el key del property para poder internacionalizar.
				Alert.show( confirmacion.errorString );
			}
		}
		
		public function setConfirmacionAgregarUsuario( confirmacion:Confirmacion):void
		{
			confirmacionRecibida = confirmacion;
			if( confirmacion.estado  == Constants.CONFIRMACION_OK )
			{ 
				setLoginState(Constants.STATE_LOGIN);
				
			} else {
				Alert.show( Constants.getString( confirmacion.errorString ) );
			}	
		}
		public function setRegistroActividades ( value:ArrayCollection, diaDesde:Date, diaHasta:Date, periodo:String, camposBorrados:Array ):void
		{			
			var cantLogin:Number = 0;
			var cantDescargaPDF:Number = 0;
			var cantDetalleLibro:Number = 0;
			var cantAltaSugerencia:Number = 0;
			var cantAltaComentario:Number = 0;
			
			var dataSortField:SortField = new SortField();
			dataSortField.name = "fecha";
			dataSortField.numeric = true;
			
			
			var periodosAgregados:Array = new Array();
			var cambioDePeriodo:Boolean = false;
			var periodoActual:Date = diaDesde;
			var periodoString:String;
			actividades = new ArrayCollection();
			
			var formatDateTime:DateFormatter = new DateFormatter();
			if( periodo == Constants.PERIODO_DIA )
				formatDateTime.formatString = "DD/MMMM";
			else if( periodo == Constants.PERIODO_MES )
				formatDateTime.formatString = "MMMM/YY";
			
			//Obtiene los datos del grafico
			diaDesdeFiltrado = diaDesde;
			diaHastaFiltrado = diaHasta;
			periodoFiltrado = periodo;
			camposBorradosFiltrado = camposBorrados;
			
			//Obtiene si ha habido filtrado en el grafico
			if (camposBorrados != null)
				filtradoActividades = true
			
			for( var i=0; i<value.length; i++ )
			{
				switch( value[i].tipoActividad )
				{
					case Constants.ACTIVIDAD_LOGIN:
						cantLogin ++;
						break;
					
					case Constants.ACTIVIDAD_DESCARGA_PDF:
						cantDescargaPDF++;
						break;
					
					case Constants.ACTIVIDAD_DETALLE_LIBRO:
						cantDetalleLibro++;
						break;
					
					case Constants.ACTIVIDAD_ALTA_SUGERENCIA:
						cantAltaSugerencia++;
						break;
					
					case Constants.ACTIVIDAD_ALTA_COMENTARIO:
						cantAltaComentario++;
						break;
				}
				
				if ( i == (value.length-1) )
				{
					actividades.addItem( {periodo:periodoActual, login:cantLogin, descargas:cantDescargaPDF, detalle:cantDetalleLibro, altaSugerencia:cantAltaSugerencia, altaComentario:cantAltaComentario} );
					//actividades.addItem( {periodo:periodoActual, login:cantLogin, descargas:Math.round(Math.random() * 30), detalle:Math.round(Math.random() * 30), altaSugerencia:Math.round(Math.random() * 30), altaComentario:Math.round(Math.random() * 30)} );
					periodosAgregados.push( periodoActual );
					
				} else {
					//controla el cambio de estado segun el periodo elegido.
					cambioDePeriodo = false;
					if( periodo == Constants.PERIODO_DIA )
					{
						if( !DateUtils.isSameDay(value[(i+1)].fecha , periodoActual) )
							cambioDePeriodo = true;
					}
					else if( periodo == Constants.PERIODO_MES )
					{
						if( !DateUtils.isSameDay(DateUtils.getEndOfMonth(value[(i+1)].fecha) , DateUtils.getEndOfMonth(periodoActual)) )
							cambioDePeriodo = true;
					}
					
					if( cambioDePeriodo )
					{
						actividades.addItem( {periodo:periodoActual, login:cantLogin, descargas:cantDescargaPDF, detalle:cantDetalleLibro, altaSugerencia:cantAltaSugerencia, altaComentario:cantAltaComentario} );
						//actividades.addItem( {periodo:periodoActual, login:cantLogin, descargas:Math.round(Math.random() * 30), detalle:Math.round(Math.random() * 30), altaSugerencia:Math.round(Math.random() * 30), altaComentario:Math.round(Math.random() * 30)} );
						periodosAgregados.push( periodoActual );
						periodoActual = value[(i+1)].fecha;
						
						cantLogin = 0;
						cantDescargaPDF = 0;
						cantDetalleLibro = 0;
						cantAltaSugerencia = 0;
						cantAltaComentario = 0;
					}	
				}
			}
			
			//agrego los dias que no tienen actividad
			var j:Date = diaDesde;
			var agregado:Boolean;
			while( j<=diaHasta )
			{
				agregado = false;
				for( i=0; i<periodosAgregados.length; i++ )
				{
					if( periodo == Constants.PERIODO_DIA )
					{
						if( DateUtils.isSameDay(j,periodosAgregados[i]) )
							agregado = true
					} else if( periodo == Constants.PERIODO_MES ) {
						if( DateUtils.isSameDay(DateUtils.getEndOfMonth(j),DateUtils.getEndOfMonth(periodosAgregados[i])) )
							agregado = true
					}
						
				}
				if( !agregado )
				{
					actividades.addItem( {periodo:j, login:0, descargas:0, detalle:0, altaSugerencia:0, altaComentario:0} );
					//actividades.addItem( {periodo:j, login:0, descargas:Math.round(Math.random() * 30), detalle:Math.round(Math.random() * 30), altaSugerencia:Math.round(Math.random() * 30), altaComentario:Math.round(Math.random() * 30)} );
				}
				
				if( periodo == Constants.PERIODO_DIA )
					j = DateUtils.addDays(j, 1);
				else if( periodo == Constants.PERIODO_MES )
					j = DateUtils.addMonths(j, 1);
			}
			
			var dataSortField:SortField = new SortField();
			dataSortField.name = "periodo";
			
			var dataSort:Sort = new Sort();
			dataSort.fields = [dataSortField];
			
			actividades.sort = dataSort;
			actividades.refresh();
			cubeStackSelected = 0;
			
			//formatea las fechas que va a mostrar en el chart una vez que ya estan ordenadas
			for( i=0; i<actividades.length; i++ )
				 actividades.getItemAt( i ).periodo = formatDateTime.format( actividades.getItemAt( i ).periodo );
			
			if( camposBorrados != null )
			{
				var k:int;
				for( i=0; i<camposBorrados.length; i++ )
				{
					for( k=0; k<actividades.length; k++ )
					{
						switch( camposBorrados[i] )
						{
							case Constants.ACTIVIDAD_ALTA_COMENTARIO:
								actividades.getItemAt(k).altaComentario = null;
								break;
							case Constants.ACTIVIDAD_ALTA_SUGERENCIA:
								actividades.getItemAt(k).altaSugerencia = null;
								break;
							case Constants.ACTIVIDAD_DESCARGA_PDF:
								actividades.getItemAt(k).descargas = null;
								break;
							case Constants.ACTIVIDAD_DETALLE_LIBRO:
								actividades.getItemAt(k).detalle = null;
								break;
							case Constants.ACTIVIDAD_LOGIN:
								actividades.getItemAt(k).login = null;
								break;
						}
					}
				}
			}
		}
		
		public function verFiltrosDeActividad():void
		{
			cubeStackSelected = 1;
		}

		private var imagenesLibrosCache:Dictionary = new Dictionary();
		
		public function actualizarImagenLibro( libro:Libro ):void
		{ 
			if( imagenesLibrosCache[ libro.imagen ])
			{
				libro.imagenData = imagenesLibrosCache[ libro.imagen ];
				trace("imagen en cache!");
			} else {
				var event:GLBooksEvent = new GLBooksEvent( GLBooksEvent.BUSCAR_IMAGEN);
				event.libroSeleccionado = libro;
				dispatcher.dispatchEvent( event );
				trace("perdir imagen a java!");
			}
		}
		
		public function setImagenLibro( libro:Libro, imagen:ByteArray ):void
		{
			trace("volvio imagen!");
			libro.imagenData = imagen;
			imagenesLibrosCache[ libro.imagen ] = imagen;
		}
		
		public function setPdfLibro( libro:LibroDigital, pdf:ByteArray ):void
		{
			libro.pdfData = pdf;
		}
		

		public function iniciarSesion(usuario:Usuario, recordarUsuario:Boolean, contrasenia:String ):void
		{
			
			if(usuario.estadoAlta == Constants.USUARIO_ESTADO_BAJA)
			{
				var error:String = "login.error";
				Alert.show( Constants.getString( error ) );
				return;
			}else{	
				usuarioSeleccionado=usuario;
				if(usuarioSeleccionado.idioma==Constants.IDIOMA_CASTELLANO)
				{
					idiomaSeleccionado=0;
				}
				else
				{
					idiomaSeleccionado=1;
				}
				
				
				if( usuario.responsabilidad == Constants.RESPONSABILIDAD_RESPONSABLE )
				{
					responsableState = Constants.RESPONSABILIDAD_RESPONSABLE;
					var event:GLBooksEvent = new GLBooksEvent( GLBooksEvent.INICIO_RESPONSABLE );
					dispatcher.dispatchEvent( event );
				}	
				
				if( usuario.responsabilidad == Constants.RESPONSABILIDAD_USUARIO )
				{
					responsableState = Constants.RESPONSABILIDAD_USUARIO;
					var event:GLBooksEvent = new GLBooksEvent( GLBooksEvent.INICIO_USUARIO );
					dispatcher.dispatchEvent( event );
				}
				contraseniaLogin=contrasenia;
				setLoginState(Constants.STATE_LOGGED);
				setApplicationState( Constants.STATE_INICIAL );
				agregarActividad( Constants.ACTIVIDAD_LOGIN, 0 );
				
				var event:GLBooksEvent; 
				if( recordarUsuario )
				{ 	
					event = new GLBooksEvent( GLBooksEvent.RECORDAR_USUARIO );
					event.contraseniaLogin = contrasenia;
				} else {
					event = new GLBooksEvent( GLBooksEvent.BORRAR_RECORDAR_USUARIO );
				}
				event.usuarioSeleccionado = usuario;
				dispatcher.dispatchEvent( event );
				this.loadComplete();
			}
		}
		
		public function agregarActividad( tipoActividad:String, activityObjectId:int = 0 ):void
		{
			var event:GLBooksEvent = new GLBooksEvent( GLBooksEvent.ALTA_ACTIVIDAD );
			event.actividad = new Actividad();
			event.actividad.fecha = new Date();
			event.actividad.usuario = usuarioSeleccionado;
			event.actividad.activityObjectId = activityObjectId;
			event.actividad.tipoActividad = tipoActividad;
			dispatcher.dispatchEvent( event );	
		}
		
		public function setConfirmacionGenerica(confirmacion:Confirmacion):void
		{
			if( confirmacion.estado  == Constants.CONFIRMACION_ERROR )
			{ 
				Alert.show( Constants.getString( confirmacion.errorString ) );
			}
		}
		
		public function solicitarActualizacion( message:AsyncMessage ):void
		{
		var tipoActualizacion:String = message.body as String;
			
	//	if( usuarioSeleccionado.responsabilidad == Constants.RESPONSABILIDAD_RESPONSABLE || usuarioSeleccionado.responsabilidad == Constants.RESPONSABILIDAD_USUARIO) {
			switch( tipoActualizacion )
			{
				case Constants.ACTUALIZACION_LIBROS:
					dispatcher.dispatchEvent(new GLBooksEvent( GLBooksEvent.BUSCAR_LIBROS ) );
					break;
				case Constants.ACTUALIZACION_PALABRASCLAVES:
					dispatcher.dispatchEvent(new GLBooksEvent( GLBooksEvent.BUSCAR_PALABRAS_CLAVES ) );
					break;
				case Constants.ACTUALIZACION_CATEGORIAS:
					dispatcher.dispatchEvent(new GLBooksEvent( GLBooksEvent.BUSCAR_CATEGORIAS ) );
					break;
				case Constants.ACTUALIZACION_EDITORIALES:
					dispatcher.dispatchEvent(new GLBooksEvent( GLBooksEvent.BUSCAR_EDITORIALES ) );
					break;
				case Constants.ACTUALIZACION_OFICINAS:
					dispatcher.dispatchEvent(new GLBooksEvent( GLBooksEvent.BUSCAR_OFICINAS ) );
					break;
				case Constants.ACTUALIZACION_USUARIOS:
					dispatcher.dispatchEvent(new GLBooksEvent( GLBooksEvent.BUSCAR_USUARIOS ) );
					break;
				default :
					break;
			}
	//	}
			if( usuarioSeleccionado.responsabilidad == Constants.RESPONSABILIDAD_RESPONSABLE) {
				switch( tipoActualizacion )
				{
					case Constants.ACTUALIZACION_SUGERENCIAS:
						dispatcher.dispatchEvent(new GLBooksEvent( GLBooksEvent.BUSCAR_SUGERENCIAS ) );
						break;
					case Constants.ACTUALIZACION_SUGERENCIAS_PDF:
						dispatcher.dispatchEvent(new GLBooksEvent( GLBooksEvent.BUSCAR_SUGERENCIAS_PDF ) );
						break;
					default :
						break;
				}
			}
			
			if(usuarioSeleccionado.responsabilidad == Constants.RESPONSABILIDAD_RESPONSABLE){
				
				var event: GLBooksEvent = new GLBooksEvent( GLBooksEvent.BUSCAR_REGISTRO_DE_ACTIVIDAD );
				
				if(!filtradoActividades){
					
					var diaDesdeSinFiltrado:Date = new Date( DateUtils.addDays(new Date(), -7) );
					var diaHastaSinFiltrado:Date = new Date();;
					var periodoSinFiltrado:String = Constants.PERIODO_DIA;
					var camposBorradosSinFiltrado:Array = null;
					
					event.diaDesde = diaDesdeSinFiltrado;
					event.diaHasta = diaHastaSinFiltrado;
					event.periodo = periodoSinFiltrado;
					event.camposBorradosActividad = camposBorradosSinFiltrado;
					dispatcher.dispatchEvent( event ); 
				}
				if(filtradoActividades)
				{
					event.diaDesde = diaDesdeFiltrado;
					event.diaHasta = diaHastaFiltrado;
					event.periodo = periodoFiltrado;
					event.camposBorradosActividad = camposBorradosFiltrado;
					dispatcher.dispatchEvent( event );
				}
			}
		}
		
		public function setConfirmacionPrestamos(confirmacion:Confirmacion):void
		{
			if( confirmacion.estado  == Constants.CONFIRMACION_ERROR )
			{ 
				Alert.show( Constants.getString( confirmacion.errorString ) );
			}
			else
			{
				dispatcher.dispatchEvent( new GLBooksEvent( GLBooksEvent.BUSCAR_PRESTAMOS ) );
				dispatcher.dispatchEvent( new GLBooksEvent( GLBooksEvent.BUSCAR_USUARIOS ) );
				dispatcher.dispatchEvent( new GLBooksEvent( GLBooksEvent.BUSCAR_LIBROS ) );
				setPrestamosState( Constants.STATE_PRESTAMOS_INICIAL );
				setApplicationState( Constants.STATE_INICIAL );
			}
		}
		
		
	//Salir de la aplicacion
	public function cerrarSesion():void
	{
		var url :URLRequest = new URLRequest("/glbooks/MainApplication.html");
		navigateToURL(url, "_self");
		this.loadComplete();
	}
	
	//Quitar el reloj del cursor
	private function loadComplete():void
	{
		CursorManager.removeBusyCursor();
	}
	
}
	 /*function setConfirmacionNovedades(confirmacion:Confirmacion):void
	{
		if( confirmacion.estado  == Constants.CONFIRMACION_ERROR )
		{ 
			Alert.show( Constants.getString( confirmacion.errorString ) );
		}
		else
		{
			dispatcher.dispatchEvent( new GLBooksEvent( GLBooksEvent.BUSCAR_PRESTAMOS ) );
			dispatcher.dispatchEvent( new GLBooksEvent( GLBooksEvent.BUSCAR_USUARIOS ) );
			dispatcher.dispatchEvent( new GLBooksEvent( GLBooksEvent.BUSCAR_LIBROS ) );
			setNovedadesState( Constants.STATE_NOVEDADES_INICIAL );
			setApplicationState( Constants.STATE_BUSQUEDA );
		}
	}
	*/
	
}